2 #ifndef FrameLib_THREADING_H 3 #define FrameLib_THREADING_H 20 #include <semaphore.h> 29 #elif defined(__APPLE__) 34 #include <mach/mach.h> 63 return value.compare_exchange_strong(comparand, exchange);
67 bool nullSwap(std::atomic<T *>& value, T *exchange)
69 T *comparand =
nullptr;
70 return value.compare_exchange_strong(comparand, exchange);
98 void acquire() {
while(attempt() ==
false); }
103 std::atomic<bool> mAtomicLock;
157 typedef void ThreadFunctionType(
void *);
161 enum PriorityLevel {kLowPriority, kMediumPriority, kHighPriority, kAudioPriority};
164 : mInternal(nullptr), mPriority(priority), mThreadFunction(threadFunction), mArg(arg), mValid(false)
182 void call() { mThreadFunction(mArg); }
188 ThreadFunctionType *mThreadFunction;
270 static void threadEntry(
void *thread);
271 void threadClassEntry();
275 virtual void doTask() = 0;
326 static void threadEntry(
void *thread);
327 void threadClassEntry();
331 virtual void doTask() = 0;
339 std::atomic<int> mFlag;
DWORD WINAPI OSThreadFunctionType(LPVOID arg)
Definition: FrameLib_Threading.h:53
PriorityLevel
Definition: FrameLib_Threading.h:161
a spinlock that can be locked, attempted or acquired.
Definition: FrameLib_Threading.h:84
void signal()
Definition: FrameLib_Threading.h:264
virtual ~FrameLib_DelegateThread()
Definition: FrameLib_Threading.h:302
bool compareAndSwap(std::atomic< T > &value, T comparand, T exchange)
Definition: FrameLib_Threading.h:61
FrameLib_SpinLockHolder(FrameLib_SpinLock *lock)
Definition: FrameLib_Threading.h:122
a RAII hold utility for a FrameLib_SpinLock
Definition: FrameLib_Threading.h:117
a thread that can be triggered from another thread (there is no mechanism to check progress) ...
Definition: FrameLib_Threading.h:244
virtual ~FrameLib_TriggerableThread()
Definition: FrameLib_Threading.h:250
bool attempt()
Definition: FrameLib_Threading.h:97
void start()
Definition: FrameLib_Threading.h:311
HANDLE OSSemaphoreType
Definition: FrameLib_Threading.h:52
FrameLib_Thread(PriorityLevel priority, ThreadFunctionType *threadFunction, void *arg)
Definition: FrameLib_Threading.h:163
bool nullSwap(std::atomic< T *> &value, T *exchange)
Definition: FrameLib_Threading.h:67
HANDLE OSThreadType
Definition: FrameLib_Threading.h:51
void release()
Definition: FrameLib_Threading.h:99
Definition: FrameLib_Threading.h:49
void start()
Definition: FrameLib_Threading.h:259
a semaphore class wrapping an OS-level semaphore
Definition: FrameLib_Threading.h:206
lightweight joinable thread with variable priority level
Definition: FrameLib_Threading.h:155
void destroy()
Definition: FrameLib_Threading.h:130
~FrameLib_SpinLockHolder()
Definition: FrameLib_Threading.h:123
FrameLib_SpinLock()
Definition: FrameLib_Threading.h:89
FrameLib_TriggerableThread(FrameLib_Thread::PriorityLevel priority)
Definition: FrameLib_Threading.h:249
~FrameLib_SpinLock()
Definition: FrameLib_Threading.h:90
void acquire()
Definition: FrameLib_Threading.h:98
FrameLib_DelegateThread(FrameLib_Thread::PriorityLevel priority)
Definition: FrameLib_Threading.h:301
a thread to delegate tasks to, which can be then be checked for completion
Definition: FrameLib_Threading.h:296